home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 14439 / 14439.xpi / chrome / tabber.jar / content / tklib.js < prev   
Text File  |  2009-10-22  |  5KB  |  137 lines

  1. /*
  2.  
  3. Protected Tabs and Open Tabs from Bookmarks and History
  4. Reference: Tab Kit by John Mellor
  5. Latest revisions by Frank Yan - 2009.10.05
  6.  
  7. <license>
  8.  
  9. Tab Kit - http://jomel.me.uk/software/firefox/tabkit/
  10. Copyright (c) 2007 John Mellor
  11.  
  12. This Firefox extension, Tab Kit, is free software; you can
  13. redistribute it and/or modify it under the terms of the GNU
  14. General Public License as published by the Free Software
  15. Foundation; either version 2 of the License, or (at your
  16. option) any later version.
  17.  
  18. Tab Kit is distributed in the hope that it will be useful,
  19. but WITHOUT ANY WARRANTY; without even the implied warranty of
  20. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  21. GNU General Public License for more details.
  22.  
  23. You should have received a copy of the GNU General Public License
  24. along with this program. If not, see <http://www.gnu.org/licenses/>.
  25.  
  26. </license>
  27.  
  28. */
  29.  
  30. // const Cc = Components.classes, Ci = Components.interfaces;
  31.  
  32. if(typeof gPrefService == "undefined" || !gPrefService)
  33.     gPrefService = Cc["@mozilla.org/preferences-service;1"].getService(Ci.nsIPrefBranch);
  34.  
  35. var tkLib = new function _tkLib() {
  36.     const tk = this;
  37.     this.addMethodHook = function(hook) {
  38.         try {
  39.             if(hook[1])
  40.                 eval(hook[1] + "=" + hook[0]);
  41.             var code = eval(hook[0] + ".toString()");
  42.             for(var i = 2; i < hook.length; ) {
  43.                 var newCode = code.replace(hook[i++], hook[i++]);
  44.                 if(newCode == code) {
  45.                     // method hook had no effect
  46.                 }
  47.                 else code = newCode;
  48.             }
  49.             eval(hook[0] + "=" + code);
  50.         }
  51.         catch(ex) {
  52.             // method hook failed
  53.         }
  54.     };
  55.     this.prependMethodCode = function(methodname, codestring) {
  56.         tk.addMethodHook([methodname, null, '{', '{' + codestring]);
  57.     };
  58.     this.beep = function() {
  59.         Cc["@mozilla.org/sound;1"].getService(Ci.nsISound).beep();
  60.     };
  61.     this.warnAboutClosingProtectedTabs = function(numProtected) {
  62.         window.focus();
  63.         var strings = document.getElementById("bundle_tabber");
  64.         var _ps = Cc["@mozilla.org/embedcomp/prompt-service;1"]
  65.         .getService(Ci.nsIPromptService);
  66.         var flags = _ps.BUTTON_POS_0 * _ps.BUTTON_TITLE_IS_STRING
  67.         + _ps.BUTTON_POS_1 * _ps.BUTTON_TITLE_CANCEL
  68.         + _ps.BUTTON_POS_2 * _ps.BUTTON_TITLE_IS_STRING;
  69.         var _tabs = gBrowser.mTabs;
  70.         var button = _ps.confirmEx(
  71.         window, //aParent
  72.         gBrowser.mStringBundle.getString("tabs.closeWarningTitle"), //aDialogTitle
  73.         strings.getFormattedString("close_warning_protected_tabs", [ _tabs.length, numProtected ]), //aText
  74.         flags, // aButtonFlags
  75.         strings.getString("close_all_tabs"), //aButton0Title
  76.         null, //aButton1Title // Cancel has to be button 1 due to Bug 345067 ΓÇô confirmEx always returns 1 when user closes dialog window using X button in titlebar
  77.         strings.getString("close_unprotected_tabs"), //aButton2Title
  78.         null, //aCheckMsg
  79.         {} //aCheckState
  80.         );
  81.         if(button == 0) { // Close all tabs
  82.             return true;
  83.         }
  84.         else if(button == 2) { // Close unprotected tabs
  85.             for (var i = _tabs.length - 1; i >= 0; --i)
  86.                 if(_tabs[i].getAttribute("protected") != "true")
  87.                 gBrowser.removeTab(_tabs[i]);
  88.                 return false;
  89.             }
  90.         else { // Cancel
  91.             return false;
  92.         }
  93.     };
  94. };
  95.  
  96. function tabberwockyOpenPlacesInTab() {
  97.     tkLib.addMethodHook([
  98.         'PlacesUIUtils.openNodeWithEvent',
  99.         null,
  100.         'this.openNodeIn(aNode, whereToOpenLink(aEvent));',
  101.         'this.openNodeIn(aNode, whereToOpenLink(aEvent), aEvent);'
  102.     ]);
  103.     tkLib.addMethodHook([
  104.         'PlacesUIUtils.openNodeIn',
  105.         null,
  106.         'openUILinkIn(aNode.uri, aWhere);',
  107.         'if(arguments.length == 3 && gPrefService.getBoolPref("tabberwocky.opentabsfromplaces")) { \
  108.             if(aWhere == "tab" || /^\\s*javascript:/.test(aNode.uri)) { \
  109.                 aWhere = "current"; \
  110.             } \
  111.             else { \
  112.                 var w = getTopWin(); \
  113.                 var browser = w ? w.getBrowser().mCurrentTab.linkedBrowser : w; \
  114.                 if(aWhere == "current"\
  115.                     && (!browser \
  116.                     || browser.webNavigation.currentURI.spec != "about:blank" \
  117.                     || browser.webProgress.isLoadingDocument)) \
  118.                 { \
  119.                     aWhere = "tab"; \
  120.                 } \
  121.             } \
  122.         } \
  123.         $&'
  124.     ]);
  125.     document.getElementById('placesContext').addEventListener('popupshowing', function() {
  126.         if(gPrefService.getBoolPref("tabberwocky.opentabsfromplaces")) {
  127.             document.getElementById('placesContext_open').removeAttribute('default');
  128.             document.getElementById('placesContext_open:newtab').setAttribute('default', true);
  129.         }
  130.         else {
  131.             document.getElementById('placesContext_open:newtab').removeAttribute('default');
  132.             document.getElementById('placesContext_open').setAttribute('default', true);
  133.         }
  134.     }, false);
  135. }
  136.  
  137. window.addEventListener("load", tabberwockyOpenPlacesInTab, false);